/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package AccesoDatos.Persistencia.Manager;

import AccesoDatos.Persistencia.Entidad.EItempedido;
import LogicaNegocio.Biblioteca.ItemPedido;
import MainBiblioSoft.BiblioSoft;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceUnit;

/**
 * Metodo constructor, crea un gestor para la persistencia de ItemPedido
 * recibe como argumento el nombre de la unidad de persistencia.
 *
 * @author sebaxtian
 * Archivo: ManagerItemPedido.java
 * @version 1.0
 * Fecha: mar may  4 15:22:31 COT 2010
 */


public class ManagerItemPedido {

    @PersistenceUnit
    private EntityManagerFactory managerFactory;
    private EntityManager entityManager;

    /**
     * Metodo constructor, crea un gestor para la persistencia de ItemPedido
     * 
     */
    public ManagerItemPedido() {
        managerFactory = BiblioSoft.managerFactory;
        entityManager = managerFactory.createEntityManager();
    }

    /**
     * Metodo encargado de la persistencia en la entidad ItemPedido
     * de un objeto ItemPedido
     *
     * @param itemPedido
     */
    public void crearItemPedido(ItemPedido itemPedido) {
        entityManager.clear();
        EItempedido entidadItemPedido = new EItempedido();
        entidadItemPedido.setIsbnpedido(itemPedido.getIsbnPedido());
        entidadItemPedido.setNumeropedido(itemPedido.getNumeroPedido());
        entidadItemPedido.setCantidaditem(itemPedido.getCantidad());
        EntityTransaction transaccion = entityManager.getTransaction();
        transaccion.begin();
        entityManager.persist(entidadItemPedido);
        transaccion.commit();
        entityManager.clear();
    }

    /**
     * Elimina un item de la entidad item pedido.
     * 
     * @param idItem
     */
    public void eliminarItemPedido(int idItem) {
        entityManager.clear();
        EItempedido entidadItemPedido;
        EntityTransaction transaccion = entityManager.getTransaction();
        transaccion.begin();
        entidadItemPedido = entityManager.find(EItempedido.class, idItem);
        transaccion.commit();
        if(entidadItemPedido != null){
            transaccion.begin();
            entityManager.remove(entidadItemPedido);
            transaccion.commit();
        }
        entityManager.clear();
    }

    /**
     * Actualiza el item de un pedido en la base de datos.
     * 
     * @param idItem
     * @param itemPedido
     */
    public void actualizarItemPedido(int idItem, ItemPedido itemPedido) {
        entityManager.clear();
        EItempedido entidadItemPedido;
        EntityTransaction transaccion = entityManager.getTransaction();
        transaccion.begin();
        entidadItemPedido = entityManager.find(EItempedido.class, idItem);
        transaccion.commit();
        if(entidadItemPedido != null){
            entidadItemPedido.setIsbnpedido(itemPedido.getIsbnPedido());
            entidadItemPedido.setNumeropedido(itemPedido.getNumeroPedido());
            entidadItemPedido.setCantidaditem(itemPedido.getCantidad());
            transaccion.begin();
            entityManager.merge(entidadItemPedido);
            transaccion.commit();
        }
        entityManager.clear();
    }

    /**
     * Obtiene el item pedido identificado de la base de datos.
     *
     * @param idItem
     * @return item
     */
    public ItemPedido obtenerItemPedido(int idItem) {
        entityManager.clear();
        EItempedido entidadItemPedido;
        ItemPedido item = null;
        EntityTransaction transaccion = entityManager.getTransaction();
        transaccion.begin();
        entidadItemPedido = entityManager.find(EItempedido.class, idItem);
        transaccion.commit();
        if(entidadItemPedido != null){
            item = new ItemPedido();
            item.setIdItem(entidadItemPedido.getIditem());
            item.setNumeroPedido(entidadItemPedido.getNumeropedido());
            item.setIsbnPedido(entidadItemPedido.getIsbnpedido());
            item.setCantidad(entidadItemPedido.getCantidaditem());
        }
        entityManager.clear();
        return item;
    }
}
